//package org.jeecg.modules.system.service.impl;
//
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//import javax.annotation.Resource;
//
//import org.jeecg.common.constant.CommonConstant;
//import org.jeecg.common.system.query.QueryGenerator;
//import org.jeecg.common.util.oConvertUtils;
//import org.jeecg.modules.system.entity.SysPermission;
//import org.jeecg.modules.system.entity.SysPermissionDataRule;
//import org.jeecg.modules.system.mapper.SysPermissionDataRuleMapper;
//import org.jeecg.modules.system.mapper.SysPermissionMapper;
//import org.jeecg.modules.system.service.ISysPermissionDataRuleService;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//
///**
// * <p>
// * 菜单权限规则  服务实现类
// * </p>
// *
// */
//@Service
//public class SysPermissionDataRuleImpl extends ServiceImpl<SysPermissionDataRuleMapper, SysPermissionDataRule>
//		implements ISysPermissionDataRuleService {
//
//	@Resource
//	private SysPermissionMapper sysPermissionMapper;
//
//	/**
//	 * 根据菜单id查询其对应的权限数据
//	 */
//	@Override
//	public List<SysPermissionDataRule> getPermRuleListByPermId(String permissionId) {
//		LambdaQueryWrapper<SysPermissionDataRule> query = new LambdaQueryWrapper<SysPermissionDataRule>();
//		query.eq(SysPermissionDataRule::getPermissionId, permissionId);
//		query.orderByDesc(SysPermissionDataRule::getCreateTime);
//		List<SysPermissionDataRule> permRuleList = this.list(query);
//		return permRuleList;
//	}
//
//	/**
//	 * 根据前端传递的权限名称和权限值参数来查询权限数据
//	 */
//	@Override
//	public List<SysPermissionDataRule> queryPermissionRule(SysPermissionDataRule permRule) {
//		QueryWrapper<SysPermissionDataRule> queryWrapper = QueryGenerator.initQueryWrapper(permRule, null);
//		return this.list(queryWrapper);
//	}
//
//	@Override
//	public List<SysPermissionDataRule> queryPermissionDataRules(String username,String permissionId) {
//		List<String> idsList = this.baseMapper.queryDataRuleIds(username, permissionId);
//		//update-begin--Author:scott  Date:20191119  for：数据权限失效问题处理--------------------
//		if(idsList==null || idsList.size()==0) {
//			return null;
//		}
//		//update-end--Author:scott  Date:20191119  for：数据权限失效问题处理--------------------
//		Set<String> set = new HashSet<String>();
//		for (String ids : idsList) {
//			if(oConvertUtils.isEmpty(ids)) {
//				continue;
//			}
//			String[] arr = ids.split(",");
//			for (String id : arr) {
//				if(oConvertUtils.isNotEmpty(id) && !set.contains(id)) {
//					set.add(id);
//				}
//			}
//		}
//		if(set.size()==0) {
//			return null;
//		}
//		return this.baseMapper.selectList(new QueryWrapper<SysPermissionDataRule>().in("id", set).eq("status",CommonConstant.STATUS_1));
//	}
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//	public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) {
//		this.save(sysPermissionDataRule);
//		SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId());
//        boolean flag = permission != null && (permission.getRuleFlag() == null || permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_0));
//        if(flag) {
//			permission.setRuleFlag(CommonConstant.RULE_FLAG_1);
//			sysPermissionMapper.updateById(permission);
//		}
//	}
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//	public void deletePermissionDataRule(String dataRuleId) {
//		SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId);
//		if(dataRule!=null) {
//			this.removeById(dataRuleId);
//			Long count =  this.baseMapper.selectCount(new LambdaQueryWrapper<SysPermissionDataRule>().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId()));
//			//注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效
//			if(count==null || count==0) {
//				SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId());
//				if(permission!=null && permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_1)) {
//					permission.setRuleFlag(CommonConstant.RULE_FLAG_0);
//					sysPermissionMapper.updateById(permission);
//				}
//			}
//		}
//		
//	}
//
//}
